import java.util.*;

public class Test {
    class CmpKV implements Comparator<Map.Entry<String, Integer>> {
        public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2){
            if(o1.getValue() == o2.getValue()){
                return o2.getKey().compareTo(o1.getKey());
            }else{
                return o1.getValue() - o2.getValue();
            }
        }
    }


    class Solution {
        public List<String> topKFrequent(String[] words, int k) {
            // 1. 统计每个单词出现的次数
            Map<String, Integer> m = new HashMap<>();
            for(int i = 0; i < words.length; ++i){
                m.put(words[i], m.getOrDefault(words[i], 0)+1);
            }
            // 2. 创建一个优先级队列--所有元素放进去，创建一个堆
            CmpKV cmp = new CmpKV();
            PriorityQueue<Map.Entry<String, Integer>> p = new PriorityQueue<>(cmp);
            int size = 0;
            for(Map.Entry<String, Integer> e : m.entrySet()){
                p.offer(e);
                // 当优先级队列中元素大于k个时，删除堆顶元素
                // 始终保持优先级队列中为k个元素
                if(p.size() > k){
                    p.poll();
                }
            }
            // 3. 取堆中的前K个元素
            List<String> lRet = new ArrayList<>(k);
            while(!p.isEmpty()){
                lRet.add(p.poll().getKey());
            }
            // 注意：从优先级队列中取出的元素刚好是反的，需要逆置过来
            Collections.reverse(lRet);
            return lRet;
        }
    }

    public static boolean containsNearbyDuplicate(int[] nums, int k) {
        //注意k的值

        //1.创建哈希表
        Map<Integer,Integer> map = new HashMap<>();

        //2.使用哈希表统计次数
        int m = 0;
        int n = 0;
        for(int i = 0;i < nums.length;i++){
            map.put(nums[i],map.getOrDefault(nums[i],0) + 1);
        }

        //3.map中是否存在出现次数为2的key
        for(int i = 0;i < nums.length;i++){
            if(map.get(nums[i]) >= 2)
            {
                m = i;
                break;
            }
        }
        for(int i = m + 1;i < nums.length;i++){
            if(nums[m] == nums[i]){
                n = i;
                break;
            }
        }
        if(n - m <= k) return true;

        return false;
    }

    public static void main(String[] args) {
        int[] nums = {1,0,1,1};
        System.out.println(containsNearbyDuplicate(nums, 1));
    }
}
